As microprocessors and computer systems advance, greater amounts of software can be executed on a single platform. To accommodate different software that may be written for different platforms and operating systems (OSs), virtualization technologies can be used. Virtualization enables multiple OSs and various software to execute on a single platform. Using virtualization techniques, a software application may consider itself to be the only entity executing on a platform, although multiple applications may be concurrently executing.
Virtualization is typically implemented by using software (e.g., a virtual machine monitor (VMM)) to present to each OS a virtual machine (VM) having virtual resources, including one or more virtual processors that the OS may completely and directly control, while the VMM maintains a system environment for implementing virtualization policies such as sharing and/or allocating physical resources of the system among the VMs. Each OS and other software that runs on a VM is referred to as a guest or guest software, while a host or host software is software such as a VMM that runs outside of the virtualization environment.
Thus virtualization technologies allow multiple guest software (generally, guests) to simultaneously run on a single host or physical platform. A guest executing on a system may see a virtual central processing unit (CPU) which appears to the guest as a physical CPU having the same frequency as the physical CPU. In many instances, a guest relies on a CPU time counter for time keeping.
In various environments, when a guest is migrated from one physical platform to another, the physical CPU of the new platform may operate at a different frequency than the CPU of the original platform. This causes a change in the rate of the time counter for the physical CPU that the guest runs on, which can create difficulties for operations of the guest that rely on a time keeping function and can even cause a crash.